package git.soulbgm.mapper;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 统计映射器
 *
 * @author SoulBGM
 * @date 2024-09-22
 */
public interface StatisticsMapper {

    /**
     * 分组
     *
     * @param columns   查询字段
     * @param tableName 表名称
     * @param timeField 时间字段名称
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @param groupBy   分组字段名称
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    @Select("<script> SELECT ${columns} FROM ${tableName} WHERE ${timeField} BETWEEN ${startTime} AND ${endTime} <if test=\"groupBy != null and groupBy != ''\"> GROUP BY ${groupBy} </if> </script>")
    List<Map<String, Object>> group(@Param("columns") String columns, @Param("tableName") String tableName, @Param("timeField") String timeField, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("groupBy") String groupBy);

    /**
     * 插入统计信息
     *
     * @param tableName 表名称
     * @param columns   插入字段
     * @param values    插入值
     * @return int
     */
    @Insert("INSERT INTO ${tableName} (${columns}) VALUES ${values}")
    int insertStatistics(@Param("tableName") String tableName, @Param("columns") String columns, @Param("values") String values);

}
